package com.qingzhuge.sms.service;

import com.qingzhuge.dto.response.BaseResponseDto;
import com.qingzhuge.service.IBasePkLongService;
import com.qingzhuge.sms.entity.SysSms;
import com.qingzhuge.sms.vo.SmsSendDetails;

/**
 * @author : zero.xiao
 * @description :
 * @date : 2018/9/21 0021 上午 10:35
 * @modified :
 * @since :
 */
public interface ISysSmsService extends IBasePkLongService<SysSms> {
    /**用户登录验证码*/
    String CACHE_KEY_SMS_CODE_LOGIN = "qingzhuge:sms:code:login:";
    /**用户注册验证码*/
    String CACHE_KEY_SMS_CODE_REGISTER = "qingzhuge:sms:code:register:";
    /**用户找回密码*/
    String CACHE_KEY_SMS_CODE_RESET_PASSWORD = "qingzhuge:sms:code:resetPassword:";

    SysSms findByEnableIsTrue();
    /**
     * 发送短信验证码
     * @param phone 手机号
     * @param value 发送的内容
     * @param templateCode 模板编号
     * @return 发送结果
     */
    SmsSendDetails send(String phone, String value, String templateCode);

    /**
     * 查询短信发送明细
     * @param phone 手机号
     * @param bizId 可选-流水号
     * @param pageSize 明细分页
     * @param currentPage 明细页码
     * @return 查询结果
     */
    SmsSendDetails querySendDetails(String phone, String bizId,Long pageSize,Long currentPage);

    /**
     * 保存短信验证码到缓存
     * @param key 缓存key
     * @param code 验证码
     */
    void saveSmsCode2Cache(String key, String code);

    /**
     * 从缓存获取短信验证码
     * @param key 缓存key
     */
    String getSmsCodeForCache(String key);
    /**
     * 从缓存删除短信验证码
     * @param key 缓存key
     */
    void deleteSmsCodeForCache(String key);

    /**
     * 发送短信验证码
     * @param mobile 接收手机号
     * @param templateCode 短信模板
     * @param key 缓存key
     * @param count 验证码长度
     * @return 发送状态
     */
    boolean sendSmsCode(String mobile, String templateCode, String key,int count);

    /**
     * 发送短信
     * @param mobile 接收手机号
     * @param templateCode 短信模板
     * @param value 发送的自定义数据
     * @return
     */
    boolean sendSms(String mobile, String templateCode, Object value);

    /**注册验证码*/
    BaseResponseDto registerCode(String mobile);
    /**登录验证码*/
    BaseResponseDto loginCode(String mobile);
    /**重置密码验证码*/
    BaseResponseDto resetPwdCode(String mobile);

    String getRegisterCodeKey(String mobile);

    String getLoginCodeKey(String mobile);

    String getResetPwdCodeKey(String mobile);
}
